# 打印主菜单
print("|"+"-".ljust(13, "-") + "学生成绩管理系统".ljust(20, "-") + "|")
print("|"+"-".ljust(13, "-") + "1.添加学生成绩".ljust(21, "-") + "|")
print("|"+"-".ljust(13, "-") + "2.查询学生成绩".ljust(21, "-") + "|")
print("|"+"-".ljust(13, "-") + "3.更新学生成绩".ljust(21, "-") + "|")
print("|"+"-".ljust(13, "-") + "4.删除学生成绩".ljust(21, "-") + "|")
print("|"+"-".ljust(12, "-") + "5.显示所有学生成绩".ljust(21, "-") + "|")

# 创建学生字典
student = {
  "John": {
    "ds": 89,
    "os": 72,
    "co": 91,
    "cn": 81,
  },
  "Jim": {
      "ds": 81,
      "os": 82,
      "co": 71,
      "cn": 78,
    },
  "Linda": {
      "ds": 69,
      "os": 74,
      "co": 81,
      "cn": 61,
    },
  "Amy": {
      "ds": 79,
      "os": 76,
      "co": 95,
      "cn": 91,
  }
}

# 此处为方便运行新添加的学生成绩设置为全局变量
new_score = {
        "ds": 80,
        "os": 80,
        "co": 80,
        "cn": 80,
  }

# 1.添加学生成绩
def add_stu_score(new_score):
  '''
  添加学生成绩
  :param new_score: 为了方便展示，new_scores为已设置好的全局变量
  :return: 无返回值，直接打印
  '''
  new_score_name = input("请输入要添加录入成绩的学生姓名：")
  # 如果添加的是系统中原有学生的成绩
  if new_score_name in list(student.keys()):
    update_stu = student.get(new_score_name)
    update_stu.update(new_score)
  # 如果添加的是系统中没有的学生的成绩
  else:
    new_student = {f"{new_score_name}": new_score}
    student.update(new_student)
  print("添加后的学生成绩单为：")
  for k, v in student.items():
    print(k, v)

# 2.查询某位学生的成绩
def search_stu_score():
  '''
  查询某位学生的成绩
  :return: 无返回值，直接打印
  '''
  search_stu_name = input("请输入您所要查询成绩的学生姓名：")
  # 如果查询的是原有学生的成绩
  if search_stu_name in list(student.keys()):
    print(f"{search_stu_name}的成绩单如下")
    print(student.get(search_stu_name))
  # 如果查询的是系统中没有的学生的成绩
  else:
    print("系统中没有该学生！")

# 3.更新学生的成绩
def update_stu_score():
  '''
  更新学生的成绩
  :return: 无返回值，直接打印
  '''
  ud_score_name = input("请输入要更新成绩的学生姓名：")
  # 如果更新的是系统中原有学生的成绩
  if ud_score_name in list(student.keys()):
    update_stu = student.get(ud_score_name)
    update_stu.update(new_score)
    print("更新后的学生成绩单为：")
    for k, v in student.items():
      print(k, v)
  # 如果更新的是系统中没有的学生的成绩
  else:
    print("系统中没有该学生，请添加该学生及其成绩！")


# 4.删除学生成绩记录
def delete_stu_score():
  '''
  删除学生成绩记录（姓名也会删除，而非更新为None）
  :return: 无返回值，直接打印
  '''
  del_stu_name = input("请输入要删除成绩的学生姓名：")
  # 如果更新的是系统中原有学生的成绩
  if del_stu_name in list(student.keys()):
    student.pop(del_stu_name)
    print(f"删除{del_stu_name}成绩记录后的学生成绩单为：")
    for k, v in student.items():
      print(k, v)
  # 如果更新的是系统中没有的学生的成绩
  else:
    print("系统中没有该学生！")

# 5.显示所有学生成绩
def show_all_scores():
  '''
  显示所有学生成绩
  :return: 无返回值，直接打印
  '''
  print("所有学生成绩如下：")
  for k, v in student.items():          # 遍历打印所有学生成绩
    print(k, v)

if __name__ == '__main__':
  # 选择所要进行的操作（用if elif else实现switch-case）
  while True:
    choice = int(input("请选择您所要进行的操作："))
    if choice == 1:
      add_stu_score(new_score)
    elif choice == 2:
      search_stu_score()
    elif choice == 3:
      update_stu_score()
    elif choice == 4:
      delete_stu_score()
    elif choice == 5:
      show_all_scores()
    else:
      break


